const path = require('path');
const CampusNotice = require('../models/CampusNotice');
const HotTopic = require('../models/HotTopic');
const Activity = require('../models/Activity');
const MarketItem = require('../models/MarketItem');

// 日期格式化函数
const formatDate = (date) => {
  if (!date) return '';
  const d = new Date(date);
  return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
};

// 首页数据聚合：按分类聚合作品，数量与前端示例一致
exports.getHomeData = async (req, res) => {
  try {
    // 主页区块：通知、话题、活动、市场
    const [mainNotices, mainTopics, activities, marketItems] = await Promise.all([
      CampusNotice.find({}).sort({ date: -1 }).limit(4),
      HotTopic.find({}).sort({ count: -1 }).limit(6),
      Activity.find({}).limit(15),
      MarketItem.find({}).limit(15)
    ]);
    
    // 处理日期格式
    const processedNotices = mainNotices.map(notice => ({
      ...notice.toObject(),
      date: formatDate(notice.date)
    }));
    
    const processedActivities = activities.map(activity => ({
      ...activity.toObject(),
      date: formatDate(activity.date)
    }));

    // 兼容前端结构
    res.json({
      mainNotices: processedNotices,
      mainTopics,
      activities: processedActivities,
      marketItems,
      // 学习区静态数据
      studyLeft: {
        title: '热门课程推荐',
        description: '精选优质在线课程，涵盖计算机、语言、艺术等多个领域，帮助你快速提升技能。'
      },
      studyRight: {
        title: '学习资料下载',
        description: '提供各类学习资料模板、论文写作指南、考试复习重点等资源，助力你的学业发展。'
      },
      sideTopics: [
        { title: '社团招新答疑', description: '各社团负责人在线解答疑问...' },
        { title: '食堂菜品建议', description: '欢迎提出改进意见...' },
        { title: '校园卡充值问题', description: '解决常见使用问题...' },
        { title: '教学楼开放时间', description: '本学期调整方案说明...' },
        { title: '心理健康咨询', description: '专业咨询服务预约通道...' },
        { title: '创新创业大赛', description: '报名截止日期即将来临...' }
      ]
    });
  } catch (err) {
    res.status(500).json({ message: '获取首页数据失败' });
  }
};

// 校园通知接口
exports.getNotices = async (req, res) => {
  const limit = parseInt(req.query.limit) || 5;
  try {
    const notices = await CampusNotice.find({}).sort({ date: -1 }).limit(limit);
    console.log('校园通知数据库查询结果:', notices);
    if (!Array.isArray(notices)) {
      console.log('警告: notices不是数组');
      return res.json({ data: [] });
    }
    
    // 处理日期格式
    const processedNotices = notices.map(notice => ({
      ...notice.toObject(),
      date: formatDate(notice.date)
    }));
    
    res.json({ data: processedNotices });
  } catch (err) {
    res.status(500).json({ message: '获取通知失败' });
  }
};

// 热点话题接口
exports.getTopics = async (req, res) => {
  const limit = parseInt(req.query.limit) || 10;
  try {
    const topics = await HotTopic.find({}).sort({ count: -1 }).limit(limit);
    console.log('热点话题数据库查询结果:', topics);
    res.json({ data: topics });
  } catch (err) {
    res.status(500).json({ message: '获取话题失败' });
  }
};

// 活动信息接口
exports.getActivities = async (req, res) => {
  const limit = parseInt(req.query.limit) || 5;
  try {
    const activities = await Activity.find({}).limit(limit);
    console.log('活动信息数据库查询结果:', activities);
    res.json({ data: activities });
  } catch (err) {
    res.status(500).json({ message: '获取活动失败' });
  }
};

// 二手市场接口
exports.getMarketItems = async (req, res) => {
  const limit = parseInt(req.query.limit) || 10;
  try {
    const items = await MarketItem.find({}).limit(limit);
    // 处理图片路径，确保以/images/开头
    const processedItems = items.map(item => ({
      ...item.toObject(),
      images: item.images.map(img => img.startsWith('/images/') ? img : `/images/${path.basename(img)}`)
    }));
    console.log('二手市场数据库查询结果:', processedItems);
    res.json({ data: processedItems });
  } catch (err) {
    res.status(500).json({ message: '获取二手商品失败' });
  }
};

// 学习区接口
exports.getStudy = async (req, res) => {
  try {
    res.json({
      left: {
        title: '热门课程推荐',
        description: '精选优质在线课程，涵盖计算机、语言、艺术等多个领域，帮助你快速提升技能。'
      },
      right: {
        title: '学习资料下载',
        description: '提供各类学习资料模板、论文写作指南、考试复习重点等资源，助力你的学业发展。'
      }
    });
  } catch (err) {
    res.status(500).json({ message: '获取学习区信息失败' });
  }
};
